// utils/stepManager.js
// 统一的步数管理器

const stepUtils = require('./step');

// 全局步数数据缓存
let globalStepData = null;
let lastUpdateTime = 0;

/**
 * 获取统一的步数数据
 * @returns {Promise} 步数数据
 */
function getUnifiedStepData() {
  return new Promise((resolve, reject) => {
    const now = Date.now();
    
    // 如果距离上次更新不到10秒，使用缓存数据
    if (globalStepData && (now - lastUpdateTime) < 10000) {
      console.log('使用缓存的步数数据');
      resolve(globalStepData);
      return;
    }
    
    // 获取新的步数数据
    stepUtils.getWechatSteps()
      .then(stepData => {
        // 计算累计步数（最近7天的总和）
        let totalSteps = 0;
        let todaySteps = 0;
        
        if (stepData.stepInfoList && Array.isArray(stepData.stepInfoList)) {
          // 计算总累计步数
          totalSteps = stepData.stepInfoList.reduce((sum, item) => sum + item.step, 0);
          // 获取今日步数
          todaySteps = stepUtils.getTodaySteps(stepData.stepInfoList);
        } else if (stepData.step) {
          // 简化格式
          todaySteps = stepData.step;
          totalSteps = stepData.step * 7; // 假设7天都是这个步数
        }
        
        // 构建统一的步数数据
        const unifiedData = {
          todaySteps: todaySteps,           // 今日步数
          totalSteps: totalSteps,           // 累计步数（7天总和）
          stepInfoList: stepData.stepInfoList || [],
          stats: stepUtils.getStepStats(todaySteps),
          updateTime: stepData.updateTime || new Date().toLocaleTimeString(),
          // 计算相关数据
          averageSteps: Math.floor(totalSteps / 7), // 平均每日步数
          weeklyDistance: Math.floor(totalSteps * 0.7 / 1000), // 一周行走距离(公里)
          weeklyCalories: Math.floor(totalSteps * 0.04) // 一周消耗卡路里
        };
        
        // 缓存数据
        globalStepData = unifiedData;
        lastUpdateTime = now;
        
        console.log('统一步数数据更新:', unifiedData);
        resolve(unifiedData);
      })
      .catch(reject);
  });
}

/**
 * 获取实时更新的步数数据
 * @returns {Promise} 步数数据
 */
function getRealtimeUnifiedStepData() {
  return new Promise((resolve, reject) => {
    stepUtils.getRealtimeSteps()
      .then(stepData => {
        // 计算累计步数
        let totalSteps = 0;
        let todaySteps = 0;
        
        if (stepData.stepInfoList && Array.isArray(stepData.stepInfoList)) {
          totalSteps = stepData.stepInfoList.reduce((sum, item) => sum + item.step, 0);
          todaySteps = stepUtils.getTodaySteps(stepData.stepInfoList);
        } else if (stepData.step) {
          todaySteps = stepData.step;
          totalSteps = stepData.step * 7;
        }
        
        // 构建统一的步数数据
        const unifiedData = {
          todaySteps: todaySteps,
          totalSteps: totalSteps,
          stepInfoList: stepData.stepInfoList || [],
          stats: stepUtils.getStepStats(todaySteps),
          updateTime: stepData.updateTime || new Date().toLocaleTimeString(),
          averageSteps: Math.floor(totalSteps / 7),
          weeklyDistance: Math.floor(totalSteps * 0.7 / 1000),
          weeklyCalories: Math.floor(totalSteps * 0.04)
        };
        
        // 更新缓存
        globalStepData = unifiedData;
        lastUpdateTime = Date.now();
        
        console.log('实时步数数据更新:', unifiedData);
        resolve(unifiedData);
      })
      .catch(reject);
  });
}

/**
 * 清除缓存，强制重新获取数据
 */
function clearCache() {
  globalStepData = null;
  lastUpdateTime = 0;
}

/**
 * 获取缓存的步数数据（如果有）
 * @returns {Object|null} 缓存的步数数据
 */
function getCachedStepData() {
  return globalStepData;
}

module.exports = {
  getUnifiedStepData,
  getRealtimeUnifiedStepData,
  clearCache,
  getCachedStepData
}; 